﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using QuanLyThuVien.DTO;
using QuanLyThuVien.DAL;
using System.Windows.Forms;
using System.Data;

namespace QuanLyThuVien.BLL
{
    //----------------------------------------------------------------------
    //Desc: class xử lý cho bảng DOCGIA
    //----------------------------------------------------------------------
    public class BLLDocGia
    {
        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public BLLDocGia()
        {
            
        }

        //----------------------------------------------------------------------
        //Desc: kiểm tra tuổi độc giả
        //----------------------------------------------------------------------
        public bool KiemTraTuoiDG(DTODocGia docgia)
        {
            DALQuyDinh _dalQuyDinh = new DALQuyDinh();
            int tuoitoithieu = _dalQuyDinh.LayTuoiToiThieu();
            int tuoitoida = _dalQuyDinh.LayTuoiToiDa();
            if (tuoitoithieu < 0 || tuoitoida < 0)
            {
                MessageBox.Show("Không lấy được qd tuổi độc giả");
                return false;
            }
            else
            {
                int tuoi = docgia.NgayLapThe.Year - docgia.NgaySinh.Year;
                if (tuoi < tuoitoithieu || tuoi > tuoitoida)
                    return false;
                return true;
            }
            
        }

        //----------------------------------------------------------------------
        //Desc: kiểm tra tồn tại độc giả
        //----------------------------------------------------------------------
        public bool KiemTraDG(string madocgia)
        {
            DALDocGia _dalDocGia = new DALDocGia();
            if (_dalDocGia.DemMaDG(madocgia) > 0)
                return true;
            else
                return false;
        }

        //----------------------------------------------------------------------
        //Desc: phát sinh mã độc giả
        //----------------------------------------------------------------------
        public bool PhatSinhMaDG(ref DTODocGia docgia)
        {
            DALDocGia _dalDocGia;
            _dalDocGia = new DALDocGia();

            int stt = _dalDocGia.DemDGTheoNam(docgia.NgayLapThe.Year);
            if (stt < 0)
                return false;
            if (stt == 0)
                stt++;

            string nam = (docgia.NgayLapThe.Year % 100).ToString("D2");
            string madg = nam +  stt.ToString("D3");
            int dem = _dalDocGia.DemMaDG(madg);

            //có thể xảy ra vòng lặp vô hạn
            while (dem > 0)
            {
                stt++;
                madg = nam + stt.ToString("D3");
                dem = _dalDocGia.DemMaDG(madg);
            }

            if (dem < 0)
                return false;

            docgia.MaDG = madg;
            return true;
        }

        //----------------------------------------------------------------------
        //Desc: tính ngày hết hạn
        //----------------------------------------------------------------------
        public bool TinhNgayHetHan(ref DTODocGia docgia)
        {
            DALQuyDinh _dalQuyDinh = new DALQuyDinh();
            int thoihanthe = _dalQuyDinh.LayThoiHanThe();
            if (thoihanthe < 0)
            {
                MessageBox.Show("Không lấy được qd độc giả");
                return false;
            }
            else
            {
                try
                {
                    docgia.NgayHetHan = docgia.NgayLapThe.AddMonths(thoihanthe);
                }
                catch
                { return false; }
                
                return true;
            }
        }

        //----------------------------------------------------------------------
        //Desc: lấy thông tin độc giả
        //----------------------------------------------------------------------
        public DTODocGia LayThongTinDG(string madg)
        {
            DALDocGia _dalDocGia = new DALDocGia();
            DALLoaiDG _dalLoaiDG = new DALLoaiDG();
            DTODocGia docgia = _dalDocGia.LayThongTinDG(madg);
            if (docgia != null)
                docgia.LoaiDG.TenLoaiDG = _dalLoaiDG.LayTenLoaiDG(docgia.LoaiDG.MaLoaiDG);
            return docgia;
        }

        //----------------------------------------------------------------------
        //Desc: lấy thông tin độc giả, trả về datatable
        //----------------------------------------------------------------------
        public DataTable LayThongTinDocGia(string madg)
        {
            DALDocGia _dalDocGia = new DALDocGia();
            return _dalDocGia.LayThongTinDocGia(madg);
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật tổng nợ
        //----------------------------------------------------------------------
        public bool CapNhatTongNo(string madg, double tongno)
        {
            DALDocGia _dalDocGia = new DALDocGia();
            return _dalDocGia.CapNhatTongNo(madg, tongno);
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật độc giả
        //----------------------------------------------------------------------
        public bool CapNhat(DTODocGia docgia)
        {
            DALDocGia _dalDocGia = new DALDocGia();

            return _dalDocGia.CapNhat(docgia);
        }

        //----------------------------------------------------------------------
        //Desc: lấy danh sách độc giả
        //----------------------------------------------------------------------
        public DataTable LayDSDocGia()
        {
            DALDocGia _dalDocGia = new DALDocGia();
            return _dalDocGia.LayDSDocGia();
        }

        //----------------------------------------------------------------------
        //Desc: lấy danh sách độc giả có thẻ hết hạn
        //----------------------------------------------------------------------
        public DataTable LayDSDocGiaHetHan()
        {
            DALDocGia _dalDocGia = new DALDocGia();
            return _dalDocGia.LayDSDocGiaHetHan();
        }

        //----------------------------------------------------------------------
        //Desc: kiểm tra tồn tại phiếu mượn
        //----------------------------------------------------------------------
        public bool KiemTraTonTaiPhieuMuon(string madocgia)
        {
            DALDocGia _dalDocGia = new DALDocGia();
            int dem = _dalDocGia.DemSoPhieuMuonCuaDG(madocgia);
            if (dem > 0)
                return true;
            else
                return false;
        }

        //----------------------------------------------------------------------
        //Desc: xóa độc giả
        //----------------------------------------------------------------------
        public bool Xoa(DTODocGia docgia)
        {
            DALDocGia _dalDocGia = new DALDocGia();
            return _dalDocGia.Xoa(docgia);
        }
    }
}
